export function repeat<R = any>(
  count = 0,
  callback: (index: number) => R,
): R[] {
  const arr: R[] = [];
  for (let i = 0; i < count; i++) {
    callback && arr.push(callback(i));
  }
  return arr;
}

/**
 * 使用 JSON.stringify() 忽略对象中的指定字段
 * @param {Object} obj - 原始对象
 * @param {Array<string>} fieldsToOmit - 要忽略的字段数组
 * @returns {string} - 序列化后的 JSON 字符串，不包含指定字段
 */
export function omittingFields(obj: object, fieldsToOmit: string[]) {
  try {
    const str = JSON.stringify(
      obj,
      (key, value) => {
        return fieldsToOmit.includes(key) ? undefined : value;
      },
      2,
    );

    return JSON.parse(str);
  } catch (e) {
    return {};
  }
}

/**
 * 使用 JSON.stringify() 只保留对象中的指定字段
 * @param {Object} obj - 原始对象
 * @param {Array<string>} fieldsToKeep - 要保留的字段数组
 * @returns {string} - 序列化后的 JSON 字符串，仅包含指定字段
 */
export function keepingFields(obj: object, fieldsToKeep: string[]) {
  try {
    const str = JSON.stringify(
      obj,
      (key, value) => {
        return key === "" || fieldsToKeep.includes(key) ? value : undefined;
      },
      2,
    );
    return JSON.parse(str);
  } catch (e) {
    return {};
  }
}

export function browserType() {
  let u = navigator.userAgent.toLowerCase();

  return {
    // 偵測移動端瀏覽器版本信息
    // trident: u.indexOf("Trident") > -1, //IE 核心
    // presto: u.indexOf("Presto") > -1, //opera 核心
    // webKit: u.indexOf("AppleWebKit") > -1, //Apple, google 核心
    // gecko: u.indexOf("Gecko") > -1 && u.indexOf("KHTML") == -1, //Firefox 核心
    // mobile: !!u.match(/AppleWebKit.*Mobile.*/), //行動裝置
    // ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios
    // android: u.indexOf("Android") > -1 || u.indexOf("Linux") > -1, //android 或 uc 瀏覽器
    // iPhone: u.indexOf("iPhone") > -1, //是否為 iPhone 或者 QQHD 瀏覽器
    // iPad: u.indexOf("iPad") > -1, //是否 iPad
    // webApp: u.indexOf("safari") == -1, //是否 web 应该程序，没有头部与底部
    line: u.indexOf("line") > -1, // Line 內瀏覽器
    fbapp: u.indexOf("fbav") > -1 || u.indexOf("fban") > -1, // Facebook App 內瀏覽器
    tiktok: u.indexOf("bytedance") > -1 || u.indexOf("bytelocale") > -1, // tiktok 內瀏覽器
  };
}

export function getUniqueDeviceId() {
  let userAgent = navigator.userAgent;
  let screenResolution = window.screen.width + "x" + window.screen.height;
  let timezoneOffset = new Date().getTimezoneOffset();
  return userAgent + screenResolution + timezoneOffset;
}

/**
 * 暂时只投tt和fb
 */
export function isInWebview() {
  // tt浏览器 BytedanceWebview
  return (
    navigator.userAgent.toLowerCase().includes("webview") || browserType().fbapp
  );
}
